#ifndef GRAPHPROJECT_STACK_H
#define GRAPHPROJECT_STACK_H
#include "stdio.h"
#include "stdlib.h"
#include <stdbool.h>
#define MaxSize 50              // 定义栈中元素的最大个数
typedef int Elemtype;

typedef struct {
    Elemtype data[MaxSize];     // 存方栈中元素
    int top;                    // 栈顶指针
} SqStack;

/**
 * 初始化栈
 * @param S
 */
void InitStack(SqStack *S){
    S->top = -1;     // 初始化栈顶指针
}

/**
 * 判断是否栈空
 * @param S
 * @return
 */
bool StackEmpty(SqStack S){
    if(S.top == -1)
        return true;    // 栈空
    else
        return false;   // 不空
}

/**
 * 进栈操作
 * @param S
 * @param x
 * @return
 */
bool Push(SqStack *S,Elemtype x){
    if(S->top==MaxSize)
        return false;
    S->data[++S->top] = x;
    return true;
}

/**
 * 出栈操作
 * @param S
 * @param x
 * @return
 */
bool Pop(SqStack *S,Elemtype *x){
    if(S->top==-1)      // 栈空，报错
        return false;
    *x = S->data[S->top--]; // 先出栈再指针减一
    return true;
}

/**
 * 读取栈顶元素
 * @param S
 * @param x
 * @return
 */
bool GetTop(SqStack S,Elemtype *x){
    if(S.top==-1)   // 栈空报错
        return false;
    *x = S.data[S.top]; // x记录栈顶元素
    return true;
}

#endif //GRAPHPROJECT_STACK_H
